$(document).ready(function() {
    // Asigna la opcion del menu a esta pagina
    //$(...).addClass("current_page_item");

    // Enlaza los datos de la tabla
    ko.applyBindings(new TaxisViewModel());

    // Evento de boton cancelar y esconde
    $(".cancelar")
            .bind('click', terminaEdit)
            .hide();
});

function TaxisViewModel() {
    var self = this;
    // Taxis
    self.taxis = ko.observableArray();
    $.getJSON('ObtenTaxis', self.taxis);

    // Empresas
    self.empresas = ko.observableArray();
    $.getJSON('ObtenEmpresas', self.empresas);

    self.create = function() {
        // Crea objeto con los datos del formulario
        var tmp = {
            nTaxi: $('#nTaxi').val(),
            kmLt: $('#kmLt').val(),
            nombreConductor: $('#nombreConductor').val(),
            modeloUnidad: $('#modeloUnidad').val(),
            anio: $('#anio').val(),
            empresa: obtenObjetoEmpresa(self.empresas(), $('#cmbEmpresas').val())
        };

        var json = JSON.stringify(tmp);
        $.post("AgregaEditaTaxi", json,
                function(data) {
                    var obj = jQuery.parseJSON(data);
                    var index = obtenObjetoTaxi(self.taxis(), obj.nTaxi);

                    if (index === -1) {
                        // Agrega
                        self.taxis.push(obj);
                        index = self.taxis().length;
                    } else {
                        // Edita
                        self.taxis()[index] = obj;
                        index = index + 1;

                        // Al hacer esta accion la tabla actualiza los datos
                        self.taxis.sort();
                    }

                    // Hace efecto en la fila manipulada
                    efectoEnFila(index);

                    // Desaparece el boton cancelar
                    terminaEdit();
                })
                .error(
                function(data) {
                    alert("ERROR: " + data.responseText);
                });
    };

    self.delete = function(taxi) {
        if (confirm('¿Seguro que desea eliminar este taxi?')) {
            var json = JSON.stringify(taxi);
            $.post("EliminaTaxi", json,
                    function() {
                        self.taxis.remove(taxi);
                        validaTabla();
                    })
                    .error(
                    function(data) {
                        alert("ERROR: " + data.responseText);
                    });
        }
    };

    self.update = function(taxi) {
        // Asigna el valor de los campos al objeto seleccionado
        $('#nTaxi').attr('value', taxi.nTaxi);
        $('#kmLt').attr('value', taxi.kmLt);
        $('#nombreConductor').attr('value', taxi.nombreConductor);
        $('#modeloUnidad').attr('value', taxi.modeloUnidad);
        $('#anio').attr('value', taxi.anio);
        $('#cmbEmpresas').attr('value', taxi.empresa.id);

        // Lee el indice de la fila seleccionada
        var index = obtenObjetoTaxi(self.taxis(), taxi.nTaxi) + 1;
        efectoEnFila(index);

        // Hace que el campo de numero de taxi no sea editable
        $("#nTaxi").attr('readonly', true);
        $("#nTaxi").addClass('readonly');

        // Hace aparecer el boton cancelar
        $(".cancelar")
                .fadeIn()
                .prop('disabled', false);
    };
}

function terminaEdit() {
    $('.cancelar')
            .fadeOut(500)
            .attr('disabled', 'disabled');
    $('#nTaxi.readonly')
            .removeAttr('readonly')
            .removeClass('readonly');
}

function efectoEnFila(index) {
    var fila = $('#tablaDatos #tabla tr:eq(' + index + ')');
    $(fila).fadeTo('fast', 0.3).fadeTo('fast', 1);
}

function obtenObjetoTaxi(array, nTaxi) {
    var res = -1;
    $.each(array, function(index, value) {
        if (value.nTaxi == nTaxi) {
            res = index;
        }
    });
    return res;
}

function obtenObjetoEmpresa(array, idEmpresa) {
    var res = undefined;
    $.each(array, function(index, value) {
        if (value.id == idEmpresa) {
            res = value;
        }
    });
    return res;
}

function limpiarCampos() {
    terminaEdit();
    $('#nTaxi').attr('value', "");
    $('#kmLt').attr('value', "");
    $('#nombreConductor').attr('value', "");
    $('#modeloUnidad').attr('value', "");
    $('#anio').attr('value', "");
    $('#cmbEmpresas')[0].selectedIndex = 0;
}